import java.awt.Color;
import java.awt.Font;
import java.io.DataOutputStream;
import java.io.FileOutputStream;
import java.io.OutputStream;
import java.io.PrintStream;
import java.util.Random;

import ij.IJ;
import ij.ImagePlus;
import ij.gui.NewImage;
import ij.plugin.PlugIn;
import ij.process.ImageProcessor;

// superposer un exemple et le masque


public class SuperImposeMona extends ImagePlus implements PlugIn{
	
	private ImageProcessor primeIP; 
	private int X=2800,Y=2100; // image size
	


	
	
	
	public void run(String arg) {
		System.out.println("go");
		
		ImagePlus imp,imp1,imp2,imp3; 


		imp=IJ.openImage("C:/Users/decomite/Pictures/povray/VCS/RGB/BlackMask.png");
		imp.setTitle("mask");
		primeIP=imp.getProcessor();
		X=primeIP.getWidth(); 
		Y=primeIP.getHeight(); 
		
	
		imp1=IJ.openImage("C:/Users/decomite/Pictures/povray/VCS/RGB/BlueShare2.png");
		imp1.setTitle("Blue");
		ImageProcessor primeIP1=imp1.getProcessor(); 
		
		imp2=IJ.openImage("C:/Users/decomite/Pictures/povray/VCS/RGB/GreenShare2.png");
		imp2.setTitle("Green");
		ImageProcessor primeIP2=imp2.getProcessor(); 
		
		imp3=IJ.openImage("C:/Users/decomite/Pictures/povray/VCS/RGB/RedShare2.png");
		imp3.setTitle("Red");
		ImageProcessor primeIP3=imp3.getProcessor(); 
		
	
		
        setStack(null, imp.getStack());
        //setCalibration(imp.getCalibration()); 
		
        	show();
		int xi=0;
		while(xi<10); 
		for(int i=0;i<X;i++)
			for(int j=0;j<Y;j++){
				int val0=primeIP.get(i, j); // le masque
				int val1=primeIP1.get(i,j); // le bleu
				int bb=(val1 & 0xFF0000)>>16;
				boolean blancBleu=(bb!=0);
				int valbleu=val1&0x0000FF; 
				int val2=primeIP2.get(i,j); //le vert
				bb=(val2 & 0xFF0000)>>16;
				boolean blancVert=(bb!=0); 
				int valvert=(val2 & 0x00FF00)>>8; 
				int val3=primeIP3.get(i,j); //le rouge
				bb=(val3 & 0x00FF00)>>8;
				boolean blancRouge=(bb!=0); 
				int valrouge=(val3 & 0xFF0000)>>16; 
				int indc=val0&0xFFFFFF; // reperer les pixels nors du masque
				if(indc==0)
			    // si c'est un pixel 'noir', il reste noir
				primeIP1.set(i, j,0x000000);
					
				else
				// sinon, il faut calculer sa couleur (sans tenir compte des pixels blancs)
					if(blancBleu& blancVert& blancRouge)
						primeIP1.set(i, j,0XFFFFFF);
					//Calculer la couleur du pixel par un OR sur chaque composante (sauf les points blancs)
					else{
						// remise a zero des blancs
						if(blancBleu) valbleu=0; 
						if(blancVert) valvert=0; 
						if(blancRouge)valrouge=0;
						//primeIP1.set(i,j,(valrouge<<16)+(valvert<<8)+valbleu); 
						primeIP1.set(i,j,((255-valrouge)<<16)+((255-valvert)<<8)+(255-valbleu)); 
					}
			}

		

	
		setProcessor("Verifying", primeIP1);
		
	
	
 		show(); 
 		System.out.println("termine"); 
	}
	
	
	

}
